There are many known ways to author an animation of a virtual object within a virtual world. One example is the graph-based approach in which the animation of an object is depicted as a user-defined graph of interconnected nodes, with each node representing a particular computational process involved in the animation, the ordering and dependencies of the nodes as represented by the graph representing the ordering and dependencies of the various computational processes. However, such a graph-based approach has so far proved somewhat limited when the user would like to introduce more complex computational processes, such as the use of a “physics engine” to simulate the laws of physics acting on the virtual object. For example, to date, a physics engine has been used in animations (a) as a completely independent visual effect, such as adding explosions, flames and fluids that do not interact with the rest of the virtual world; (b) adding loosely constrained visual effects such as cloth and hair simulation that are ‘attached’ to the virtual world but do not interact with it; and (c) post-process dynamics.
Post-process dynamics is a process that takes the output of an animation engine that has just processed a graph-definition of an animation in order to update an animation of an object. The post-process dynamics process “physicalises” the animation that it receives via the application of a physics engine. Two example uses of post-process dynamics are “hard keyframing” and “ragdoll” processing. “Ragdoll” post-process dynamics involves the physics engine receiving current animation data representing a virtual object from the animation engine, and then applying the simulated laws of physics to the virtual object to allow the object to move unconstrained under the simulated laws of physics. This can be used to simulate deaths of animated characters—the character collapses according to gravity and collision. “Hard keyframing” involves the physics engine receiving current animation data representing a virtual object from the animation engine and forcing the object to follow the animation path/trajectory of the animation that the animation engine outputs regardless of interaction (e.g. collision) with other objects in the virtual world—the virtual object is able to collide with, and impart momentum to, other objects in the virtual world without itself being deflected. As suggested by its name, the post process dynamics is a process that is applied to an animation after an animation processor has processed an animation description (such as a graph-definition).
Post-process dynamics has two main disadvantages. Firstly, the output of the physics engine determines the state of the virtual world—the physics engine and its simulated laws of physics determine how the virtual world will look when it is drawn to the computer screen. This is due to the fact that the post process dynamics is applied to an animation after an animation engine has processed the graph-definition for the animation This might lead to a less realistic and aesthetically pleasing animation and so animation designers may be, understandably, reluctant to make use (or at least extensive use) of post-process dynamics. Secondly, incorporating the use of a physics engine into a graph-based animation editor is non-intuitive. For example, graphs are edited/designed separately on an object-by-object basis, whereas a physics engine operates on all the objects in the virtual world simultaneously.
One possible approach would be to represent the use of a physics engine as a “physics node” of the graph but restrict it to appear only as a part of the graph that calculates final output data to represent the output animation. However, this would limit the graphs and would prevent, for example, the user defining post-physics animation-processing such as inverse-kinematics touch-ups (e.g. moving hands or fingers into contact with objects) or facial animation. Another approach might be to consider allowing the physics node representing the physics engine to be placed anywhere in the graph. However, as the physics engine can only be executed once per update of the virtual world, this would involve only being allowed to place such a physics node once in the graph. The user may, however, wish to author a state machine in a graph which includes a ragdolling character transitioning into a hard-keyframed animation—this would require the use of multiple physics nodes.
It would therefore be desirable to be able to allow the user of an animation editor or animation design tool to design an animation of an object in a more flexible manner to allow the incorporation of “physics processing” in an easier to use and more flexible manner, to thereby allow the user to create more interesting, realistic and complex animations.
The use of a physics engine is just one example difficulty with the graph-based approach. Whilst graph-based animation design provides the user with an intuitive mechanism for designing animations of objects, it would be desirable to be able to provide improvements to such graph-based design to make the authoring process more intuitive whilst also making it possible to create more interesting and complex animations (e.g. by being able to flexibly and intuitively incorporate such functionality as a physics engine).